package com.ufcg.lvc.client.prototipacao;

import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.AbsolutePanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.TextBox;
import com.smartgwt.client.widgets.grid.ListGridRecord;
import com.ufcg.lvc.client.GreetingServiceCRUD;
import com.ufcg.lvc.client.GreetingServiceCRUDAsync;
import com.ufcg.lvc.client.UserData;
import com.ufcg.lvc.client.MyListGrids.QuestoesListGrid;
import com.ufcg.lvc.shared.FieldVerifier;

public class AdicionarQuestaoDeProva {

	AbsolutePanel panelQuestoes;
	private QuestoesListGrid listGrid;
	private FieldVerifier verificador =  new FieldVerifier(); 	
	String valor;
	UserData UD;
		
	public AdicionarQuestaoDeProva(final String modelo_id, final String tituloModelo, final String assuntoModelo, final String comentarioModelo, UserData uD) {
		UD = uD;
		final AsyncCallback<Boolean> callbackB = new AsyncCallback<Boolean>() {
			@Override
			public void onFailure(Throwable caught) {
				System.out.println("Erro na comunicação com o servidor");
			}

			@Override
			public void onSuccess(Boolean result) {
			}
		};
		
		final AsyncCallback<String> callbackS = new AsyncCallback<String>() {
			@Override
			public void onFailure(Throwable caught) {
				System.out.println("Erro na comunicação com o servidor");
			}

			@Override
			public void onSuccess(String result) {
				getServicoCRUD().salvarQuestaoNoModeloProva(result,modelo_id,getValor(),callbackB);
				Window.alert("Questão adicionada!");
//				ListGridRecord elem = listGrid.getSelectedRecord();
				panelQuestoes.clear();
				final NovoModeloDeProva n = new NovoModeloDeProva(tituloModelo, assuntoModelo, comentarioModelo, UD);
//				QuestoesDoModeloRecord r = new QuestoesDoModeloRecord(getValor(), elem.getAttribute("titulo"), elem.getAttribute("enunciado"), elem.getAttribute("assunto"), elem.getAttribute("tipo"), elem.getAttribute("dificuldade")); elem.getAttribute("titulo");
//				n.addRecord(r);
				panelQuestoes.add(n.getPanel());
				
			}
		};
		
		panelQuestoes = new AbsolutePanel();
		panelQuestoes.setSize("900px", "707px");

		Label titulo = new Label("Adicionar questões de prova");
		titulo.setStyleName("gwt-TituloMedio");
		panelQuestoes.add(titulo, 0, 10);

		com.google.gwt.user.client.ui.Button btnAdicionar = new com.google.gwt.user.client.ui.Button("Adicionar");
		panelQuestoes.add(btnAdicionar, 350, 460);
		btnAdicionar.setSize("91px", "29px");

		listGrid = new QuestoesListGrid(getServicoCRUD(), UD);
		panelQuestoes.add(listGrid, 60, 69);
		
		com.google.gwt.user.client.ui.Button btnVoltar = new com.google.gwt.user.client.ui.Button("Voltar");
		panelQuestoes.add(btnVoltar, 447, 460);
		btnVoltar.setSize("91px", "29px");
		
		Label lblValorDaQuestao = new Label("Valor da questão:");
		panelQuestoes.add(lblValorDaQuestao, 70, 345);
		
		final TextBox valorQuestao = new TextBox();
		panelQuestoes.add(valorQuestao, 198, 342);
		valorQuestao.setSize("77px", "17px");
		
		Label lblPontos = new Label("pontos");
		panelQuestoes.add(lblPontos, 289, 345);
		
		com.google.gwt.user.client.ui.Button btnExibir = new com.google.gwt.user.client.ui.Button("Exibir");
		panelQuestoes.add(btnExibir, 749, 342);
		btnExibir.setSize("91px", "29px");
		
		btnVoltar.addClickHandler(new ClickHandler() {
			@Override
			public void onClick(ClickEvent event) {
				panelQuestoes.clear();
				final NovoModeloDeProva n = new NovoModeloDeProva(tituloModelo, assuntoModelo, comentarioModelo, UD);
				panelQuestoes.add(n.getPanel());
			}
		});
		btnExibir.addClickHandler(new ClickHandler() {
			@Override
			public void onClick(ClickEvent event) {
				try {
					ListGridRecord elem = listGrid.getSelectedRecord();
					NovaQuestao n = new NovaQuestao(
							elem.getAttribute("titulo"),
							elem.getAttribute("assunto"),
							elem.getAttribute("enunciado"), 
							elem.getAttribute("tipo"), 
							elem.getAttribute("dificuldade"),true, UD);
					n.getBtnVoltarSetClickHandler(new ClickHandler() {
						@Override
						public void onClick(ClickEvent event) {
							panelQuestoes.clear();
							final AdicionarQuestaoDeProva n = new AdicionarQuestaoDeProva(modelo_id, tituloModelo, assuntoModelo, comentarioModelo, UD);
							panelQuestoes.add(n.getPanel());
						}
					});
					
					panelQuestoes.clear();
					panelQuestoes.add(n.getPanel());	
				} catch (Exception e) {
					Window.alert("Selecione a questão que deseja exibir.");
				}
			}
		});
		
		btnAdicionar.addClickHandler(new ClickHandler() {
			
			@Override
			public void onClick(ClickEvent event) {
				try{
					ListGridRecord elem = listGrid.getSelectedRecord();
					if (verificador.isDouble(valorQuestao.getText())){
						setValor(valorQuestao.getText().replace(",", "."));
						getServicoCRUD().getQuestaoID(elem.getAttribute("titulo").toString(), UD.getId_usuario(), callbackS);	
					}else {
						Window.alert("Valor inválido. Digite um valor válido");
					}
				} catch (Exception e) {
					Window.alert("Selecione a questão que deseja adicionar.");
				}
				
			}
		});
	}
			
	public static GreetingServiceCRUDAsync getServicoCRUD() {
		return GWT.create(GreetingServiceCRUD.class);
	}
	
	public AbsolutePanel getPanel() {
		return panelQuestoes;
	}


	public String getValor() {
		return valor;
	}


//	public String getQuestaorEscolhida_id() {
//		return questaorEscolhida_id;
//	}


	public void setValor(String valor) {
		this.valor = valor;
	}

//	public void setQuestaorEscolhida_id(String id) {
//		this.questaorEscolhida_id = id;
//	}
}
